package com.linktco.common.utils.excel.handle;

import org.apache.poi.ss.usermodel.Row;
import java.util.List;

/**
 * 导入excel的钩子
 * @author zhangnx
 */
public interface ImportHandler<T> {

    /**
     * 处理每列数据的回调，可以在这里对每一列数据进行校验，
     * 一些比如像非空、唯一等校验需要用户自己编写校验规则，并set到对应的对象属性中
     * @param rowNum      当前行索引
     * @param columnNum      当前列索引
     * @param cellValue        单元格对象值
     * @return
     */
    default Object columnCallBack(int rowNum, int columnNum, Object cellValue){
        return null;
    }

    /**
     * 处理每行数据的回调,在这里可以set导入数据之外的字段，如创建时间等,也可在这里查看到此对象内的数据信息
     * @param rowNum   行序号
     * @param row      行对象
     * @param vo       导入的承接对象
     * @return
     */
     default T rowCallBack(int rowNum, Row row, T vo){
         return null;
     }


    /**
     * 批量保存的回调，数据缓存区放满或者数据读取完执行此方法。
     * @param cacheList   数据缓存集合
     * @return
     */
    default void saveCallBack(List<T> cacheList){

    }

    /**
     * 错误回调
     * @param rowNum      当前行索引
     * @param columnNum   当前列索引
     * @param cellValue   单元格对象值
     * @param error   单元格对象值
     */
    default void errorCallBack(int rowNum, int columnNum, Object cellValue, String error){}

}
